/*
 * TFdir.h
 *
 *  Created on: 2022年7月23日
 *      Author: wocao
 */
#include <iostream>
#include <dirent.h>
#include <fstream>
#include <vector>
#include <map>
#include "../Serializable/Serializable.hpp"
#include <sys/stat.h>
using namespace std;
#ifndef TOOLS_TFDIR_H_
#define TOOLS_TFDIR_H_

class TF_file {
public:

	void create_file(const string& path,unsigned long size){
		char buf[4096] = {0};
		ofstream ofile(path,ios::binary|ios::out);
		for(unsigned long i=0;i<size;++i) ofile.write(buf, 4096);
		ofile.close();
	}

	bool if_dir_at(const string& path){
		DIR *dir;
		dir = opendir(path.c_str());
		if(dir != NULL){
			closedir(dir);
			return true;
		}
		return false;
	}

	void creat_dir(const string& path){
		if(mkdir(path.c_str(),0777) == -1) throw "創建根目錄失敗";
	}

	void if_creat_dir(const string& path){
		if(!if_dir_at(path)){
			creat_dir(path);
		}
	}

	bool if_file_at(const string& file_name){
		ifstream file(file_name,ios::in);
		if(file.is_open()){
			file.close();
			return true;
		}
		return false;
	}
	template<typename T>
	void creat_file(const string& file_name,const T& t,const ios::openmode type){
		Serializable<T>()(t,file_name,type);
	}
	template<typename T>
	void if_creat_file(const string& file_name,const T& t,const ios::openmode type){
		if(!if_file_at(file_name)){
			creat_file(file_name,t,type);
		}
	}
};



#endif /* TOOLS_TFDIR_H_ */
